Skip to content

Method: lambda$serialize$0(Map, String, String)

1: package cz.cvut.kbss.jsonld.serialization.serializer.context;
2:
3: import cz.cvut.kbss.jopa.model.MultilingualString;
4: import cz.cvut.kbss.jsonld.JsonLd;
5: import cz.cvut.kbss.jsonld.serialization.JsonNodeFactory;
6: import cz.cvut.kbss.jsonld.serialization.model.CollectionNode;
7: import cz.cvut.kbss.jsonld.serialization.model.ObjectNode;
8: import cz.cvut.kbss.jsonld.serialization.serializer.ValueSerializer;
9: import cz.cvut.kbss.jsonld.serialization.traversal.SerializationContext;
10:
11: import java.util.*;
12:
13: public class ContextBuildingPluralMultilingualStringSerializer implements ValueSerializer<Collection<MultilingualString>> {
14:
15: @Override
16: public ObjectNode serialize(Collection<MultilingualString> value,
17: SerializationContext<Collection<MultilingualString>> ctx) {
18: if (ctx.getTerm() != null) {
19: registerTermMapping(ctx);
20: }
21: final Map<String, Set<String>> allValues = new HashMap<>();
22: value.forEach(ms -> ms.getValue().forEach((lang, text) -> {
23: allValues.putIfAbsent(lang, new LinkedHashSet<>());
24: allValues.get(lang).add(text);
25: }));
26: final ObjectNode node = ctx.getField() != null ? JsonNodeFactory.createObjectNode(ctx.getTerm()) : JsonNodeFactory.createObjectNode();
27: allValues.forEach((lang, texts) -> {
28: final String langKey = lang != null ? lang : JsonLd.NONE;
29: if (texts.size() == 1) {
30: node.addItem(JsonNodeFactory.createLiteralNode(langKey, texts.iterator().next()));
31: } else {
32: final CollectionNode<?> translations = JsonNodeFactory.createCollectionNodeFromArray(langKey);
33: texts.forEach(t -> translations.addItem(JsonNodeFactory.createLiteralNode(t)));
34: node.addItem(translations);
35: }
36: });
37: return node;
38: }
39:
40: static void registerTermMapping(SerializationContext<Collection<MultilingualString>> ctx) {
41: final ObjectNode mapping = JsonNodeFactory.createObjectNode(ctx.getFieldName());
42: mapping.addItem(JsonNodeFactory.createLiteralNode(JsonLd.ID, ctx.getTerm()));
43: mapping.addItem(JsonNodeFactory.createLiteralNode(JsonLd.CONTAINER, JsonLd.LANGUAGE));
44: ctx.registerTermMapping(ctx.getFieldName(), mapping);
45: }
46: }